Java JDBC(JavaDataBase Connectivity)是一种规范的Java API,主要用于连接和处理数据库、执行SQL语句。您可以通过Java JDBC接口连接宽表引擎,并结合Lindorm SQL进行应用开发。本文介绍使用MySQL协议,通过Java JDBC接口进行应用开发的方法。
前提条件
已开通MySQL协议兼容功能。如何开通,请参见开通MySQL协议兼容功能。
已安装Java环境,要求安装JDK 1.8及以上版本。
已将客户端IP添加至白名单,具体操作请参见设置白名单。
操作步骤
添加MySQL JDBC Driver的依赖。以Maven项目为例,在
pom.xml
文件的dependencies
中添加依赖项。示例代码如下:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
重要推荐通过8.0及以上版本的MySQL JDBC驱动连接Lindorm宽表引擎。
在Java中创建MySQL JDBC连接依赖于MySQL JDBC驱动包,您需要手动将MySQL JDBC驱动包(
mysql-connector-java-x.x.x.jar
)添加至CLASSPATH中,否则无法创建MySQL JDBC连接。
初始化MySQL JDBC客户端并建立Lindorm客户端和数据之间的连接。
Class.forName("com.mysql.jdbc.Driver"); //Lindorm控制台获取的数据库用户名。 String username = "root"; //Lindorm控制台获取的数据库密码。 String password = "root"; //建立连接时可指定某一database。若不指定database,默认使用default。 String database = "default"; //Lindorm宽表MySQL兼容地址。33060是MySQL协议的端口号。 String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?useServerPrepStmts=true"; Properties properties = new Properties(); properties.put("user", username); properties.put("password", password); //获取连接 Connection connection = DriverManager.getConnection(url, properties);
参数说明
参数
示例值
说明
url
jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/
MySQL协议的Java JDBC连接地址。格式为
jdbc:mysql://<MySQL兼容地址>/
。如何获取MySQL兼容地址,请参见查看连接地址。
重要如果应用部署在ECS实例,建议您通过专有网络访问Lindorm实例,可获得更高的安全性和更低的网络延迟。
如果应用部署在本地,在通过公网连接Lindorm实例前,需在控制台开通公网地址。开通方式:在控制台选择
,在宽表引擎页签单击开通公网地址。通过专有网络访问Lindorm实例,url请填写MySQL兼容地址对应的专有网络地址。通过公网访问Lindorm实例,url请填写MySQL兼容地址对应的公网地址。
在url中设置
useServerPrepStmts=true
可以启用服务器端预处理语句,在使用PreparedStatement的场景下可以有效提升性能。
username
root
如果您忘记用户密码,可以通过Lindorm宽表引擎的集群管理系统修改密码。具体操作,请参见修改用户密码。
password
test
database
default
需要连接的数据库名称。默认连接default数据库。
建立连接后,通过宽表SQL语法使用Lindorm宽表引擎。示例代码如下:
String tableName = "sql_table_" + new Random().nextInt(1000); //创建表 try (Statement statement = connection.createStatement()) { String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))"; int ret = statement.executeUpdate(sql); System.out.println(ret); } //插入数据 String upsertSql = "upsert into " + tableName + "(id,name) values(?,?)"; try (PreparedStatement ps = connection.prepareStatement(upsertSql)) { int batchSize = 100; for (int i = 0; i < batchSize; i++) { ps.setString(1, "aa" + i); ps.setString(2, "bb" + i); //加入批次 ps.addBatch(); } //执行全部批次的写入。 //出于性能和稳定性考量,添加的批次数量不宜过大。 //建议一次executeBatch()写入的批次数最多在百级别。 int[] ret = ps.executeBatch(); System.out.println(Arrays.toString(ret)); } //查询数据 String querySql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(querySql)) { ps.setString(1, "aa1"); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } //删除数据 String deleteSql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(deleteSql)) { ps.setString(1, "aa1"); ps.executeUpdate(); } //关闭连接,当结束操作时要确保连接被关闭,否则会造成连接泄漏。 connection.close();
宽表SQL语法的使用,请参见SQL语法手册。
- 本页导读 (1)